Without limiting the scope of the invention, its background is described in connection with an asynchronous sequential machine controller circuit coupled to an asynchronous bus interface.
In systems using an asynchronous bus to couple devices, or in coupling two devices clocked on unrelated clock time domains, the receiving device must be able to reliably receive data from the asynchronous bus and capture data from it without missing the next data word to be sent on the bus. As the fastest possible response is desired in order to enable the bus to send additional data words as rapidly as possible, it would be advantageous to use an asynchronous sequential machine as the control logic coupled to the bus. The asynchronous sequential machine can respond to changes on the bus interface as rapidly as the switching speed of the logic gates used allows, unlike sequential machine based controllers, which can only transition from state to state at clock cycle boundaries. However, coupling external asynchronous signals to an asynchronous sequential controller creates reliability problems, because the asynchronous controller may transition from state to state on an invalid or transitioning input, creating a metastability condition or erroneous state in the receiving device.
Heretofore, in the design of asynchronous bus coupling circuitry, the typical approach to these problems was to design the asynchronous sequential machine with protective "go/no-go" constructs or extra states to prevent the machine from incorrectly operating on an input signal which is in transition. Alternatively, the receiving device can handshake with the sending device so that no action is taken by either device during a time when the other device has signals in transition, and the transmitting device only changes the signals on the bus when compelled to do so by the asynchronous sequential machine. Both of these solutions require additional states or bus signals, and result in a less than optimum throughput rate on the asynchronous bus interface as well as additional hardware in the form of extra channels on the bus.
A need for a method and apparatus for coupling asynchronous data bus signals to the inputs of an asynchronous sequential machine, without requiting additional handshaking signals or unduly restricting the duration of such signals or events on the asynchronous bus, and using an easily implemented solution, thus exists. Accordingly, improvements which overcome any or all of these problems are presently desirable.